/*
 * Voiture.cpp
 *
 *  Created on: 6 mars 2011
 *      Author: Julien
 */

#include "Voiture.h"
#include "Portes.h"

// Par defaut, une voiture contient 100 passagers et 2 portes
Voiture::Voiture() {
	this->capacite_passagers = 50;
	this->nbPortes = 2;
	this->nb_passagers = 0;
	this->nbAttenteDescente = 0;
	this->portes = new Portes();
	// Création des portes
	int i;
	for(i=0; i<this->nbPortes; i++){
		Portes p;
		this->portes[i] = p;
	}

	this->voyageurs = new Passager * [capacite_passagers];
	this->descente = new Passager * [capacite_passagers];
}

int Voiture::getAttente(){
	return this->nbAttenteDescente;
}

Voiture::Voiture(const int capacite, const int nbportes){
	this->capacite_passagers = capacite;
	this->nbPortes = nbportes;
	int i;
	for(i=0; i<this->nbPortes; i++){
		Portes p;
		this->portes[i] = p;
	}
}

int Voiture::getCapacite(){
	return this->capacite_passagers;
}

int Voiture::getNbPassagers(){
	return this->nb_passagers;
}


void Voiture::monter(Passager * pass){
	this->nb_passagers++;
	bool trouve = false;
	int place;
	// On cherche une place libre dans le tableau des voyageurs.
	for(int i = 0; i<capacite_passagers && !trouve; i++){
		if(voyageurs[i] == NULL){
			trouve = true;
			place = i;
		}
	}
	voyageurs[place] = pass;
	cout << "=========> ******Voyageur affecte a la place" << place << endl;
}

void Voiture::ouvrirPortes(){
	int i;
	for(i=0; i<this->nbPortes;i++){
		this->portes[i].ouvrir();
	}
}

void Voiture::ouvrirPortes(const int index){
	if(index<0 || index >= this->nbPortes){
		cout << "La porte spécifiee n'existe pas !" << endl;
	}
	this->portes[index].ouvrir();
}

void Voiture::fermerPortes(){
	int i;
	for(i=0; i<this->nbPortes;i++){
		this->portes[i].fermer();
	}
}

void Voiture::fermerPortes(const int index){
	if(index<0 || index >= this->nbPortes){
		cout << "La porte spécifiee n'existe pas !" << endl;
	}
	this->portes[index].fermer();
}

// 1 si fermees, 0 sinon.
bool Voiture::getEtatPortes(){
	bool etat = false;
	int i;
	for(i=0; i<this->nbPortes; i++){
		etat = etat || this->portes[i].getEtatPortes();
	}
	return etat;
}

Voiture::~Voiture() {
	// TODO Auto-generated destructor stub
}
